﻿Imports System.Text
Imports System.Math

Public Class frmConstatacaoPreliminar
    Inherits formPadrao


    Dim Sep As Char = ","
    Dim Nombre As Double
    Public WithEvents ucPreambulo As New ucPreambulo
    Private nomeDiretorio As String = Nothing
    Public WithEvents btnLimpar As System.Windows.Forms.Button
    Private registro As New registroVO
    Private mensagem As String
    Private PPI As Boolean = System.Configuration.ConfigurationManager.AppSettings("PPI")
    Private erroNivel As Integer = 0
    Private regInserido As New registroVO
    Private _ehPreliminar As Boolean = Nothing
    Private fracionar As Boolean = False
    Private n As Integer
    Public WithEvents _ucDrogas As ucDrogas
    Private tevePeso As Boolean = False
    Public CARREGADADOS As Boolean = Nothing
    Public NUM_REGISTRO As Integer
    Public ANO As Integer
    Public ID_TIPO_PERICIA As Integer = 16
    Public ID_NATUREZA As Integer = 68
    Public EHNOVO As Boolean = True
    Private _ehTco As Boolean = False
    Private textoMistura As String
    Private textoMisturaEntorpecentes As String
    Private textoPPI As New StringBuilder
    Private textoExame As String = Nothing
   

    Public Property EHPRELIMINAR() As Boolean

        Get
            Return _ehPreliminar
        End Get
        Set(value As Boolean)
            _ehPreliminar = value
        End Set
    End Property
    Public Property getUcPreambulo() As ucPreambulo
        Get
            Return ucPreambulo
        End Get
        Set(ByVal value As ucPreambulo)
            ucPreambulo = value
        End Set
    End Property

    Public Sub New(ByVal ehTco As Boolean)
        ' This call is required by the designer.
        InitializeComponent()
        pnlDados.Controls.Add(ucPreambulo)
        If Not DesignMode Then
            Sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
            pnlDados.AutoSize = True
        End If
        _ucDrogas = New ucDrogas(ehTco)
        _ehTco = ehTco

    End Sub

    Private Sub frmAvaliacao_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            Me.WindowState = FormWindowState.Maximized
            generica.redimensionaControle(pnlDados)
            generica.redimensionaControle(pnlItens)
            ucPreambulo.ucPerito.Enabled = True
            
            ucPreambulo.selecionaIdTipoPericia = ucPreambulo.ID_TIPO_PERICIA
            ucPreambulo.selecionaIdNatureza = ucPreambulo.ID_NATUREZA
            ucPreambulo.pnlNatureza.Enabled = False
            Me.ControlBox = False
            ucPreambulo.getVitima = "A saúde pública"
            'ucPreambulo.getNaturezaDelito = "Art.  da Lei 11.343/06"

            If _ehTco Then
                ucPreambulo.lblTitulo.Text = "TOXICOLÓGICO DEFINITIVO RECEBIDO VIA TCO"
            Else
                ucPreambulo.lblTitulo.Text = "CONSTATAÇÃO PRELIMINAR"
            End If

            pnlResultado.Controls.Add(_ucDrogas)
            '-----------------------------------------------------
            ' SELECIONA O TEXTO PARA O CASO DE PPI
            '-----------------------------------------------------
            If Not PPI Then
                textoPPI.Append("ao Instituto de Criminalística")
            Else
                textoPPI.Append("à Secão Técnica Regional de Criminalística")
            End If

            If _ehTco Then
                textoExame = "EXAME DEFINITIVO"
            Else
                textoExame = "EXAME PRELIMINAR"
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
        '------- RETIRAR QUANDO A AMOSTRAGEM ENTRAR EM VIGOR --------------------
        grpAmostragem.Enabled = False
        grpAmostragem.Visible = True
    End Sub
    '--------------------------------------------------------------------------------------------------------------------------------
    ' FUNÇÃO QUE IRÁ GERAR O LAUDO
    '--------------------------------------------------------------------------------------------------------------------------------
    Private Sub geraLaudo()

        generica.tempo = Now

        Dim oWordTemp As New WordAppl
        Dim registroBo As New registroBO

        '-----------------------------------------------------------------------------------------
        ' ABRE O ARQUIVO WORD
        '-----------------------------------------------------------------------------------------

        If registroGlobal.registroPincipal.ID_REGISTRO > 0 Or ucPreambulo.ehNovo Then

            pb.zeraContador()
            pb.stepBarra(10)
            pb.Visible = True
            pb.stepBarra(10)

            '-----------------------------------------------------------------------------------------
            ' GRAVA REGISTRO NA BASE DE DADOS
            '-----------------------------------------------------------------------------------------
            pb.stepBarra(10)
            Try

                If generica.gravaBanco Then
                    Dim regBO As New registroBO
                    '------------------------------------------------------------------------------------
                    ' VERFICA SE É UM NOVO REGISTRO OU SE É UM REGISTRO JÁ ARMAZENADO NA BASE DE DADOS
                    '------------------------------------------------------------------------------------
                    pb.stepBarra(10)
                    pb.txtMensagem.Text = "Inserindo informações no banco de dados do sistema"
                    '-------------------------------------------------------------------------------
                    ' POPULA O ATRIBUTO MATERIALRECIBO DA TABELA REGISTRO
                    '-------------------------------------------------------------------------------
                    Dim textoProva As String = String.Empty

                    If fracionar Then

                        If Not cmbInvolucro.Text.Equals(String.Empty) Then
                            If cmbInvolucro.Text.ToUpper.Equals("INVÓLUCRO DE SEGURANÇA INSTITUTO") Then
                                textoProva = cmbInvolucro.Text & " nº " & txtInvolucroIC.Text
                            Else
                                textoProva = cmbInvolucro.Text
                            End If
                        End If
                        textoProva = textoProva & " + "
                        If Not cmbInvolucroAut.Text.Equals(String.Empty) Then
                            If cmbInvolucroAut.Text.ToUpper.Equals("INVÓLUCRO DE SEGURANÇA AUTORIDADE") Then
                                textoProva = cmbInvolucroAut.Text & " nº " & txtInvolucroAut.Text
                            Else
                                textoProva = cmbInvolucroAut.Text
                            End If
                        End If


                    Else
                        If Not cmbInvolucro.Text.Equals(String.Empty) Then
                            If cmbInvolucro.Text.ToUpper.Equals("INVÓLUCRO DE SEGURANÇA") Then
                                textoProva = cmbInvolucro.Text & " nº " & txtInvolucroIC.Text
                            Else
                                textoProva = cmbInvolucro.Text
                            End If
                        End If
                    End If

                    pb.stepBarra(10, "Obtendo o nome do diretório do arquivo")

                    Dim registroGravado As Integer
                    If registroGlobal.registroPincipal.ID_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO = False Then
                        '-----------------------------------------------------------------------------------------
                        ' RETORNO O NOME DO DIRETORIO A SER CRIADO
                        '-----------------------------------------------------------------------------------------
                        nomeDiretorio = generica.retornaNomeDiretorio(ucPreambulo.getAno, _
                                                                   ucPreambulo.getNumeroLaudo, "CONSTATAÇÃO PRELIMINAR", ucPreambulo.getIndiciado, ucPreambulo.getVitima)

                        registroGravado = regBO.updateRegistro(registroGlobal.registroPincipal, _
                                                               textoProva, ucPreambulo.getIdPeritoSelecionado, _
                                                               nomeDiretorio, ucPreambulo)
                        pb.stepBarra(10, "Inserindo o registro na base de dados")
                        pb.txtMensagem.Text = "Criando o registro na base de dados"

                        mensagem = (" O laudo n°" & registroGravado & " foi atualizado com sucesso na base de dados. Clique no ícone do WORD para visualizar o laudo.")
                        registroGlobal.registroPincipal = registroBo.getRegistroSimplificado(registroGravado, ucPreambulo.getAno)
                    Else
                        Dim regInserido As New registroVO
                        Dim reg As New registroVO
                        Dim ultimo As Integer = regBO.getUltimoRegistro
                        Dim registroTemporario As Integer = 0
                        If ultimo <> ucPreambulo.getNumeroLaudo Then
                            registroTemporario = ucPreambulo.getNumeroLaudo
                            ucPreambulo.getNumeroLaudo = ultimo
                        End If

                       

                        '-----------------------------------------------------------------------------------------
                        ' RETORNO O NOME DO DIRETORIO A SER CRIADO
                        '-----------------------------------------------------------------------------------------
                        nomeDiretorio = generica.retornaNomeDiretorio(ucPreambulo.getAno, _
                                                                   ucPreambulo.getNumeroLaudo, textoExame, ucPreambulo.getIndiciado, ucPreambulo.getVitima)

                        reg = generica.populaRegistro(ucPreambulo, generica.retornaNomeArquivoCompleto(nomeDiretorio & ".doc", nomeDiretorio), textoProva)
                        registroGravado = regBO.insereRegistro(reg)
                        registroGlobal.registroPincipal = registroBo.getRegistroSimplificado(registroGravado, ucPreambulo.getAno)
                        If registroTemporario = 0 Then
                            mensagem = (" O laudo n°" & registroGlobal.registroPincipal.NUM_REGISTRO & " foi inserido com sucesso na base de dados. Clique no ícone do WORD para visualizar o laudo.")
                        Else
                            mensagem = (" O laudo n°" & ultimo & " foi inserido com sucesso na base de dados. O laudo não foi gravado com o número inicial " & registroTemporario & " pelo fato de outro usuário ter inserido este número de laudo no banco de dados. Clique no ícone do WORD para visualizar o laudo.")
                        End If
                        pb.stepBarra(10)
                    End If

                    pb.txtMensagem.Text = "Criando o diretório no qual o arquivo ficará armazenado"

                    regInserido = registroBo.getRegistro(registroGravado, ucPreambulo.getAno)

                    '----------------------------------------------------------------------------------
                    ' INSERINDO AS INFORMAÇÕES NA TABELA DROGARELATORIO
                    '------------------------------------------------------------------------------
                    Dim id_droga As Integer = 0
                    Dim drogasRelatorios As New Generic.List(Of drogaRelatorioVO)
                    Dim drogaRelatorio As New drogaRelatorioVO
                    Dim drogaRelatorioBo As New drogaRelatorioBO


                    For Each row As DataGridViewRow In gridDrogas.Rows
                        drogaRelatorio = New drogaRelatorioVO
                        drogaRelatorio.ID_REGISTRO = regInserido.ID_REGISTRO

                        Select Case row.Cells(3).Value
                            Case "MACONHA"
                                id_droga = 1
                            Case "COCAÍNA"
                                id_droga = 2
                            Case "CRACK"
                                id_droga = 3
                            Case "LSD"
                                id_droga = 5
                            Case "ECSTASY"
                                id_droga = 5
                            Case Else
                                id_droga = 6
                        End Select

                        drogaRelatorio.ID_DROGA = id_droga
                        drogaRelatorio.MASSA = CDbl(row.Cells(4).Value)


                        If row.Cells(3).Value.ToString.IndexOf("NÃO") >= 0 Or row.Cells(3).Value.ToString.IndexOf("INCONCLUSIVO") >= 0 Then
                            drogaRelatorio.RESULTADO = False
                        Else
                            drogaRelatorio.RESULTADO = True
                        End If
                        drogasRelatorios.Add(drogaRelatorio)
                    Next
                    drogaRelatorioBo.insereDrogaRelatorio(drogasRelatorios)
                    '------------------------------------------------------------------------------------
                    ' INSERE DADOS NA TABELA PONTUACAO
                    '------------------------------------------------------------------------------------

                    Dim pontuacaobo As New pontuacaoBO
                    Dim pontuacao As New pontuacaoVO
                    Dim i As Integer

                    Try
                        If ucPreambulo.ehNovo Then
                            With pontuacao
                                .USUARIO = New usuarioVO With {.ID_USUARIO = ucPreambulo.getIdPeritoSelecionado}
                                .REGISTRO = New registroVO With {.ID_REGISTRO = registroGlobal.registroPincipal.ID_REGISTRO}
                                .PONTUACAO = registroGlobal.registroPincipal.NATUREZA.PONTOS_ATENDIMENTO
                                .TIPO_OCORRENCIA = "ATENDIMENTO"
                                .DATA_ALTERACAO = Nothing
                            End With

                            i = pontuacaobo.inserePontuacao(pontuacao)

                        Else
                            i = pontuacaobo.upDatePontuacao(ucPreambulo.getIdPeritoSelecionado, registroGlobal.registroPincipal)
                        End If
                    Catch ex As Exception
                        generica.gravaErro(ex)
                        erroNivel = 2
                        Exit Sub
                    End Try
                Else
                    mensagem = ("O sistema está configurado para não gravar registros na base de dados do sistema de registro eletrônico. Para habilitar, clique em configurações > Configurar aplicação e marque a opção <<SIM>>>. Apenas o laudo de n° " & ucPreambulo.getNumeroLaudo & " será gerado. Clique no ícono do WORD para visualizar o documento.")
                End If

                '-------------------------------------------------------------------------------------
                ' INSERE DADOS ITENS DA TABELA NA BASE LOCAL
                '-------------------------------------------------------------------------------------
            Catch ex As Exception
                generica.encerraProcessosWord()
                habilita(False, , False)
                generica.gravaErro(ex)
                erroNivel = 1
                Exit Sub
            End Try

            Try

                Dim diretorio As String = System.Configuration.ConfigurationManager.AppSettings("dirTemplateword")
                oWordTemp.OpenModelo("constatacaoPre.dot")

                'If gridDrogas.Rows.Count = 1 Then
                '    oWordTemp.OpenModelo("constatacaoPre01.dot")
                'Else
                '    oWordTemp.OpenModelo("constatacaoPre02.dot")
                'End If

                oWordTemp.SaveAs(nomeDiretorio, nomeDiretorio & ".doc")
                oWordTemp.Quit()
                oWordTemp = Nothing
                '------------------------------------------------------------------------------------------------
                ' CRIA O PREMABULO
                '------------------------------------------------------------------------------------------------
                Dim oWord As New WordAppl
                oWord.Open(nomeDiretorio, nomeDiretorio & ".doc")
                oWord.criaPreambulo(ucPreambulo)
                pb.stepBarra(10)
                pb.txtMensagem.Text = "Criando o cabeçalho do documento word"
                '------------------------------------------------------------------------------------------------
                ' INSERE ITENS NA TABELA DO DOCUMENTO WORD
                '------------------------------------------------------------------------------------------------
                pb.stepBarra(10)
                pb.txtMensagem.Text = "Inserindo informações no documento word criado"
                '------------------------------------------------------------------------------------------------
                ' VERIFICA SE O EXAME DEU POSITIVO
                '------------------------------------------------------------------------------------------------

                oWord.insereDadosDrogas(gridDrogas, 3, tevePeso)

                Dim textoInvolucroIC, textoInvolucroIC01 As New StringBuilder
                Dim textoInvolucroAut, textoInvolucroAut01 As New StringBuilder
                Dim textoPluralSingular As String = Nothing
                ' O(s) material(ais) acima descrito(s), destinados à contraprova,  segue(m) devidamente acondicionado(s)  em invólucro de segurança nº 78456.

                If gridDrogas.Rows.Count = 1 Then
                    If Not _ehTco Then
                        textoInvolucroIC.Append("O material acima discriminado, destinado à realização dos competentes exames toxicológicos definitivos, em laboratório especializado, encontra-se devidamente acondicionado em ")
                    Else
                        textoInvolucroIC.Append("O material acima descrito, destinado à contraprova, segue devidamente acondicionado em ")
                    End If

                    textoInvolucroAut.Append("O restante do material, anexado a este laudo, ficará sob guarda da Autoridade Requisitante, acondicionado em ")
                Else
                    If Not _ehTco Then
                        textoInvolucroIC.Append("Os materiais acima discriminados, destinados à realização dos competentes exames toxicológicos definitivos, em laboratório especializado, encontram-se devidamente acondicionados em ")
                    Else
                        textoInvolucroIC.Append("Os materiais acima descritos, destinados à contraprova,  seguem devidamente acondicionados em ")
                    End If
                    textoInvolucroAut.Append("O restante dos materiais, anexado a este laudo, ficarão sob guarda da Autoridade Requisitante, acondicionados em ")
                End If
                If cmbInvolucro.Text.Equals("invólucro de segurança") Then
                    textoInvolucroIC01.Append("invólucro de segurança nº ").Append(txtInvolucroIC.Text).Append(" que segue anexado a este laudo.")
                Else
                    textoInvolucroIC01.Append(cmbInvolucro.Text).Append(" devidamente lacrado e rubricado que segue anexado a este laudo.")
                End If

                If cmbInvolucroAut.Text.Equals("invólucro de segurança") Then
                    textoInvolucroAut01.Append("invólucro de segurança nº ").Append(txtInvolucroAut.Text).Append(".")
                Else
                    textoInvolucroAut01.Append(cmbInvolucroAut.Text).Append(" devidamente lacrado e rubricado por este(a) signatário(a).")
                End If

                oWord.FindAndReplacement("<<txtInvolucroIC>>", textoInvolucroIC.ToString)
                oWord.FindAndReplacement("<<txtInvolucroIC01>>", textoInvolucroIC01.ToString)

                If fracionar Then
                    oWord.FindAndReplacement("<<txtInvolucroAut>>", textoInvolucroAut.ToString)
                    oWord.FindAndReplacement("<<txtInvolucroAut01>>", textoInvolucroAut01.ToString)
                Else
                    oWord.FindAndReplacement("<<txtInvolucroAut>>", String.Empty)
                    oWord.FindAndReplacement("<<txtInvolucroAut01>>", String.Empty)
                End If

                oWord.criaAssinatura(ucPreambulo)

                oWord.Save()
                oWord.Quit()
                oWord = Nothing
                pb.stepBarra(10)
                pb.txtMensagem.Text = "Finalizando o documento"

                '-----------------------------------------------------------------------------------------------------------------------
                ' CHAMA ROTINA PARA LIMPAR CAMPOS DO CONTROLE E DO DATAGRID VIEW
                '-----------------------------------------------------------------------------------------------------------------------

            Catch exc As Exception
                generica.encerraProcessosWord()
                generica.gravaErro(exc)
                erroNivel = 2
                Exit Sub
            End Try
        Else

            '----------------------------------------------------------------------------------------------------------------------------
            ' CASO SEJA UM ARQUIVO QUE JÁ SE ENCONTRA CADASTRADO NA BASE DE DADOS
            '----------------------------------------------------------------------------------------------------------------------------
            If registroGlobal.registroPincipal.ID_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                habilita(False)
                mensagem = ("O laudo n° " & ucPreambulo.getNumeroLaudo & "/" & ucPreambulo.getAno & " já existe registrado na base de dados.Clique no ícone do WORD para visualizar o laudo.")
            Else
                mensagem = ("O laudo n° " & ucPreambulo.getNumeroLaudo & "/" & ucPreambulo.getAno & " não foi encontrado na base de dados.")
            End If
        End If
        MsgBox(mensagem)
    End Sub

    Private Sub habilita(ByVal habilita As Boolean, _
                           Optional ByVal habilitaBarra As Boolean = Nothing, _
                           Optional ByVal habilitaVerWord As Boolean = Nothing, _
                            Optional ByVal habilitaPainelItens As Boolean = Nothing, _
                            Optional ByVal habilitaNatureza As Boolean = Nothing, _
                            Optional ByVal habilitaGridIc As Boolean = Nothing, _
                            Optional ByVal habilitaGrupoSuperior As Boolean = Nothing, _
                            Optional ByVal habilitaPainelInvolucro As Boolean = Nothing)

        If Not IsNothing(habilitaVerWord) Then
            ucPreambulo.btnVerWord.Visible = habilitaVerWord
        End If

        ucPreambulo.btnGeraLaudo.Enabled = habilita
        ucPreambulo.habilitaCampos(habilita)
        ucPreambulo.selecionaIdTipoPericia = ID_TIPO_PERICIA

        If _ehPreliminar Then
            ucPreambulo.selecionaIdNatureza = ID_NATUREZA
        Else
            ucPreambulo.selecionaIdNatureza = ID_NATUREZA
        End If

        ucPreambulo.pnlNatureza.Enabled = habilitaNatureza

        If Not IsNothing(habilitaBarra) Then
            pb.Visible = habilitaBarra
            pb.zeraContador()
        End If

        If Not IsNothing(habilitaPainelItens) Then
            pnlItens.Enabled = habilitaPainelItens

        End If
        pnlInvolucro.Visible = habilitaPainelInvolucro
    End Sub

    Private Sub btnLimpa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Try
            ucPreambulo.limparCampos()
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub btnWord_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Try
            If registroGlobal.registroPincipal.NUM_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                generica.visualizaWord(nomeDiretorio, nomeDiretorio & ".doc")
            Else
                generica.visualizaWord(nomeDiretorio, nomeDiretorio & ".doc")
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub
    Private Sub chamaEventoLimpaCampos(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickLimpaCampos
        Try
            ucPreambulo.limparCampos()
            limpaCampos()
            ucPreambulo.populaDados()
            habilita(True, False, False, True, False, True, True, False)
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub


    Private Sub chamaGeraLaudo()

        Try

            For Each controle In pnlItens.Controls
                erro.SetError(controle, String.Empty)
            Next

            'COPIAR ESTE TRECHO
            Dim regBO As New registroBO
            Dim registroVOTemp As New registroVO
            Dim novoRegistro As Integer = 0
            registroVOTemp = regBO.getRegistroSimplificado(ucPreambulo.getNumeroLaudo, ucPreambulo.getAno)

            If registroVOTemp.NUM_REGISTRO > 0 And registroVOTemp.GEROULAUDO And ucPreambulo.ehNovo Then
                novoRegistro = regBO.getUltimoRegistro
                MsgBox("Laundo n° " & registroVOTemp.NUM_REGISTRO & " já foi inserido na base de dados por outro usuário logado no sistema. O laudo será gerado com o número " & novoRegistro)
                ucPreambulo.getNumeroLaudo = novoRegistro

            ElseIf registroVOTemp.NUM_REGISTRO > 0 And registroVOTemp.GEROULAUDO Then
                MsgBox("Laundo n° " & registroVOTemp.NUM_REGISTRO & " já foi atualizado na base de dados por outro usuário logado no sistema.")
                Exit Sub
            End If

            'FIM DO TRECHO

            If (generica.validaCampos(ucPreambulo)) Then
                If validaCampos() Then
                    pb.Visible = True
                    generica.salvaPreambulo(ucPreambulo)
                    geraLaudo()
                    If erroNivel > 0 Then

                        If generica.rollBack(registroGlobal.registroPincipal, nomeDiretorio, erroNivel, ucPreambulo.ehNovo, ucPreambulo) Then
                            MsgBox("O sistema recuperou de um erro grave e nenhuma informação foi gravada. Para registrar um novo laudo, clique em novo laudo")
                            erroNivel = 0
                            ucPreambulo.btnLimpaCampos.PerformClick()
                        End If

                    Else
                        ' ucPreambulo.txtDataEntrada.Enabled = False
                        habilita(False, , True, False, False, True, False)
                    End If
                End If
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub


    Public Sub chamaEventoGeraLaudo(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickGeraLaudo

        For Each controle In pnlItens.Controls
            erro.SetError(controle, String.Empty)
        Next

        Try
            'COPIAR ESTE TRECHO
            Dim regBO As New registroBO
            Dim registroVOTemp As New registroVO
            Dim novoRegistro As Integer = 0
            registroVOTemp = regBO.getRegistroSimplificado(ucPreambulo.getNumeroLaudo, ucPreambulo.getAno)

            If registroVOTemp.NUM_REGISTRO > 0 And registroVOTemp.GEROULAUDO And ucPreambulo.ehNovo Then
                novoRegistro = regBO.getUltimoRegistro
                MsgBox("Laundo n° " & registroVOTemp.NUM_REGISTRO & " já foi inserido na base de dados por outro usuário logado no sistema. O laudo será gerado com o número " & novoRegistro)
                ucPreambulo.getNumeroLaudo = novoRegistro

            ElseIf registroVOTemp.NUM_REGISTRO > 0 And registroVOTemp.GEROULAUDO Then
                MsgBox("Laundo n° " & registroVOTemp.NUM_REGISTRO & " já foi atualizado na base de dados por outro usuário logado no sistema.")
                Exit Sub
            End If

            'FIM DO TRECHO

            If (generica.validaCampos(ucPreambulo)) Then
                If gridDrogas.Rows.Count = 0 Then
                    MsgBox("Adicione pelo menos uma substância na lista")

                Else
                    '------------------------------------------------------
                    ' BUSCA NO GRID SE HOUVE FRACIONAMENTO DA SUBSTÂNCIA
                    '------------------------------------------------------
                    For Each linha As DataGridViewRow In gridDrogas.Rows
                        If CType(linha.Cells("FRACIONOU").Value, Boolean) = True Then
                            fracionar = True
                            Exit For
                        End If
                    Next
                    '------------------------------------------------------
                    ' BUSCA NO GRID SE HOUVE ALGUM SUBSTÂNCIA COM PESAGEM
                    '-----------------------------------------------------
                    For Each linha As DataGridViewRow In gridDrogas.Rows
                        If CType(linha.Cells("TEVE_PESO").Value, Boolean) = True Then
                            tevePeso = True
                            Exit For
                        End If
                    Next

                    habilitaPainelInferior(False)
                    exibeInvolucro()
                End If
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Function validaInvolucro() As Boolean

        Dim isOk As Boolean = False


        'Try


        '    If cmbInvolucro.Text.Equals(String.Empty) Then
        '        erro.SetError(cmbInvolucro, "Selecione a forma de acondicionamento")
        '    Else
        '        erro.SetError(cmbInvolucro, String.Empty)

        '        If cmbInvolucro.Text.Equals("invólucro de segurança") Then
        '            If txtInvolucroIC.Text.Equals(String.Empty) Then
        '                erro.SetError(txtInvolucroIC, "Campo obrigatório")
        '            Else
        '                erro.SetError(txtInvolucroIC, String.Empty)
        '                If fracionar Then
        '                    If cmbInvolucroAut.Text.Equals(String.Empty) Then
        '                        erro.SetError(cmbInvolucroAut, "Campo obrigatório")
        '                    Else
        '                        erro.SetError(cmbInvolucroAut, String.Empty)
        '                        If cmbInvolucroAut.Text.Equals("invólucro de segurança") Then
        '                            If txtInvolucroAut.Text.Equals(String.Empty) Then
        '                                erro.SetError(cmbInvolucroAut, "Campo obrigatório")
        '                            Else
        '                                erro.SetError(cmbInvolucroAut, String.Empty)
        '                                isOk = True
        '                            End If
        '                        End If
        '                    End If
        '                End If
        '                isOk = True
        '            End If

        '        Else

        '            isOk = True
        '        End If
        '    End If

        'Catch ex As Exception
        '    generica.gravaErro(ex)
        'End Try
        'Return isOk

        Try

            If cmbInvolucro.Text.Equals(String.Empty) Then
                erro.SetError(cmbInvolucro, "Campo obrigatório")
                Return False
            End If

            If cmbInvolucro.Text.Equals("invólucro de segurança") Then
                If txtInvolucroIC.Text.Equals(String.Empty) Then
                    erro.SetError(txtInvolucroIC, "Campo obrigatório")
                    Return False
                Else
                    erro.SetError(txtInvolucroIC, String.Empty)
                End If
            Else
                erro.SetError(cmbInvolucro, String.Empty)
            End If

            If fracionar Then
                If cmbInvolucroAut.Text.Equals(String.Empty) Then
                    erro.SetError(cmbInvolucroAut, "Campo obrigatório")
                    Return False
                End If

                If cmbInvolucroAut.Text.Equals("invólucro de segurança") Then
                    If txtInvolucroAut.Text.Equals(String.Empty) Then
                        erro.SetError(txtInvolucroAut, "Campo obrigatório")
                        Return False
                    Else
                        erro.SetError(txtInvolucroAut, String.Empty)
                    End If
                Else
                    erro.SetError(cmbInvolucroAut, String.Empty)
                End If
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
        Return True
    End Function

    Private Sub exibeInvolucro()

        Try

            pnlInvolucro.Visible = True

            If fracionar Then

                pnlAutoridade.Visible = True
            Else
                pnlAutoridade.Visible = False
            End If

        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub executaGeraLaudos()
        Try


            pb.Visible = True
            generica.salvaPreambulo(ucPreambulo)
            geraLaudo()
            If erroNivel > 0 Then

                If generica.rollBack(registroGlobal.registroPincipal, nomeDiretorio, erroNivel, ucPreambulo.ehNovo, ucPreambulo) Then
                    MsgBox("O sistema recuperou de um erro grave e nenhuma informação foi gravada. Para registrar um novo laudo, clique em novo laudo")
                    erroNivel = 0
                    ucPreambulo.btnLimpaCampos.PerformClick()
                End If

            Else
                ' ucPreambulo.txtDataEntrada.Enabled = False
                habilita(False, , True, False, False, True, False)
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Function validaCampos() As Boolean

        If _ucDrogas.getIndiceDroga <= 0 Then
            erro.SetError(_ucDrogas, "Campo obrigatório")
            _ucDrogas.Focus()
            Return False
        Else
            erro.SetError(_ucDrogas, "")
        End If

        If (cmbDescricao.Text.Length = 0) Then
            erro.SetError(cmbDescricao, "Preenchimento obrigatório")
            cmbDescricao.Focus()
            Return False
        Else
            erro.SetError(cmbDescricao, "")
        End If
        If (cmbCor.Text.Length = 0) Then
            erro.SetError(cmbCor, "Preenchimento obrigatório")
            cmbCor.Focus()
            Return False
        Else
            erro.SetError(cmbCor, "")
        End If
        If (txtQtdeUnidades.Text.Length = 0) Then
            erro.SetError(txtQtdeUnidades, "Preenchimento obrigatório")
            txtQtdeUnidades.Focus()
            Return False
        Else
            erro.SetError(txtQtdeUnidades, "")
        End If
        If (cmbAcondicionamento.Text.Length = 0) Then
            erro.SetError(cmbAcondicionamento, "Preenchimento obrigatório")
            cmbAcondicionamento.Focus()
            Return False
        Else
            erro.SetError(cmbAcondicionamento, "")
        End If

        If Not (_ucDrogas.getDrogas.Equals("ECSTASY") Or _ucDrogas.getDrogas.Equals("LOLÓ") _
                Or _ucDrogas.getDrogas.Equals("LANÇAPERFUME") _
                Or _ucDrogas.getDrogas.Equals("LSD") Or _ucDrogas.getDrogas.Equals("SOLVENTES")) Then
            If (txtPesoTotal.Text.Length = 0) Then
                erro.SetError(txtPesoTotal, "Preenchimento obrigatório")
                txtPesoTotal.Focus()
                Return False
            Else
                erro.SetError(txtPesoTotal, "")
            End If
        End If

        Return True
    End Function

    Private Sub chamaEventoVisualizaWord(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickVisualizaWord
        Try

            If registroGlobal.registroPincipal.NUM_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then
                generica.visualizaWord("", "", registroGlobal.registroPincipal.NOME_DIRETORIO)
            Else
                generica.visualizaWord(nomeDiretorio, nomeDiretorio & ".doc")
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub chamaEventoNovoLaudo(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickNovoLaudo
        Try
            ucPreambulo.limparCampos()
            limpaCampos()
            ucPreambulo.populaDados()
            ucPreambulo.getVitima = "A saúde pública"
            habilita(True, False, False, True, False, False, , False)
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub
    'aqui

    Private Sub limparErros()
        For Each controle In Me.Controls
            If TypeOf (controle) Is TextBox Or TypeOf (controle) Is ComboBox Then
                erro.SetError(controle, String.Empty)
            End If
        Next
    End Sub
    Public Sub mudouIndiceComboDrogas(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _ucDrogas.onSelectedIndexChanged
        Try
            If _ucDrogas.getDrogas.Equals("ECSTASY") Or _
                _ucDrogas.getDrogas.Equals("LOLÓ") Or _
                _ucDrogas.getDrogas.Equals("LANÇAPERFUME") Or _
                _ucDrogas.getDrogas.Equals("SOLVENTES") Or _
                _ucDrogas.getDrogas.Equals("LSD") Then
                pnlPeso.Enabled = False
            Else
                pnlPeso.Enabled = True
            End If


            If _ucDrogas.getDrogas.Equals("LOLÓ") Or _ucDrogas.getDrogas.Equals("LANÇAPERFUME") Then
                grpAmostragem.Enabled = False
            Else
                grpAmostragem.Enabled = True
            End If


            If _ucDrogas.getIndiceDroga > 0 Then
                txtQtdeUnidades.Focus()
                Select Case _ucDrogas.getDrogas.ToString
                    Case "MACONHA"
                        preencheDrogas(4, 4)
                    Case "COCAÍNA"
                        preencheDrogas(1, 1)
                    Case "LOLÓ"
                        preencheDrogas(10, 3)
                    Case "LANÇAPERFUME"
                        preencheDrogas(10, 3)
                    Case "CRACK"
                        preencheDrogas(0, 0)
                    Case "HAXIXE"
                        preencheDrogas(5, 4)
                    Case "FRUTOS DE MACONHA"
                        preencheDrogas(6, 4)
                    Case "ECSTASY"
                        preencheDrogas(7, -1)
                    Case "LSD"
                        preencheDrogas(9, -1)
                    Case Else
                        cmbDescricao.SelectedIndex = -1
                        cmbCor.SelectedIndex = -1
                        cmbDescricao.Focus()
                End Select
            End If

            '--------------------------------------------------------------------
            ' ROTINAS PARA TRATAR DOS CASOS ESPECIAIS 
            '--------------------------------------------------------------------
            'SOLVENTE
            If _ucDrogas.getDrogas.Equals("SOLVENTES") Then
                grpMistura.Visible = True
                grpMistura.Enabled = True
            Else
                grpMistura.Visible = False
                grpMistura.Enabled = False
            End If
            'MISTURA DE ENTORPECENTES
            If _ucDrogas.getDrogas.Equals("MISTURA DE ENTORPECENTES") Then
                grpMisturaEntorpecente.Visible = True
                grpMisturaEntorpecente.Enabled = True
            Else
                grpMisturaEntorpecente.Visible = False
                grpMisturaEntorpecente.Enabled = False
            End If

            'ANTIDEPRESSIVOS
            If _ucDrogas.getDrogas.Equals("SUBSTÂNCIA TERAPÊUTICA ANTIDEPRESSIVA") Then
                grpAntiDepressivo.Visible = True
                grpAntiDepressivo.Enabled = True
            Else
                grpAntiDepressivo.Visible = False
                grpAntiDepressivo.Enabled = False
            End If
            limpaErros()
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub preencheDrogas(ByVal ind_descricao As Integer, ByVal ind_cor As Integer)

        cmbDescricao.SelectedIndex = ind_descricao
        cmbCor.SelectedIndex = ind_cor

    End Sub


    Public Sub chamaEventoBuscaLaudo(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ucPreambulo.onClickBuscaLaudo
        Try
            Dim itens_avaliacaoBO As New itens_avaliacaoBO

            If _ehPreliminar Then
                ucPreambulo.getIdNatureza = ucPreambulo.ID_NATUREZA
            Else
                ucPreambulo.getIdNatureza = ucPreambulo.ID_NATUREZA
            End If
            ucPreambulo.buscaDadosLaudo(ucPreambulo, Me.MdiParent)
            limpaCampos()
            If registroGlobal.registroPincipal.ID_REGISTRO > 0 And registroGlobal.registroPincipal.GEROULAUDO Then

                habilita(False, False, True, False, False)
            Else
                habilita(True, False, False, True, False, True, False)
            End If
        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub
    Private Sub txtPesoIC_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If Not (Char.IsNumber(e.KeyChar) Or e.KeyChar.Equals(Sep) Or Char.IsControl(e.KeyChar)) Then e.Handled = True
    End Sub

    Private Sub txtInvolucro_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If Not (Char.IsNumber(e.KeyChar) Or Char.IsControl(e.KeyChar)) Then e.Handled = True
    End Sub
    Private Sub txtInvolucroIC_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If Not (Char.IsNumber(e.KeyChar) Or Char.IsControl(e.KeyChar)) Then e.Handled = True
    End Sub

    Private Sub txtPeso_KeyPress1(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If Not (Char.IsNumber(e.KeyChar) Or e.KeyChar.Equals(Sep) Or Char.IsControl(e.KeyChar)) Then e.Handled = True
    End Sub

    Private Sub txtPeso_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)

        'Dim fracionar As Boolean = False
        'If txtPeso.Text.Length > 0 Then
        '    If CType(txtPeso.Text, Double) > 10 And rdNao.Checked Then

        '        If MsgBox("Quantidade superior a 10 gramas. Deseja fracionar a quantidade ?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then

        '            fracionar = True
        '        End If

        '        If fracionar Then
        '            lblMensagem.Text = ("Quantidade superior a 10 gramas. Favor informar quantidade a ser encaminhada para o IC")
        '            lblMensagem.Visible = True
        '            grpDrogaIC.Visible = True
        '            grpDrogaIC.Enabled = True
        '            'If grpSuperior.Visible = True And rdSim.Checked Then
        '            '    grpDrogaIC.Visible = True
        '            '    grpDrogaIC.Enabled = True
        '            'Else
        '            '    grpDrogaIC.Visible = False
        '            '    grpDrogaIC.Enabled = False
        '            'End If
        '        Else
        '            lblMensagem.Text = String.Empty
        '            lblMensagem.Visible = False
        '            grpDrogaIC.Visible = False
        '        End If
        '    End If

        'End If
    End Sub
    Private Sub limpaCampos()
        Try
            For Each controle In pnlItens.Controls
                If TypeOf (controle) Is GroupBox Then
                    For Each ctrl In CType(controle, GroupBox).Controls
                        If TypeOf (ctrl) Is TextBox Then
                            CType(ctrl, TextBox).Text = String.Empty
                            erro.SetError(ctrl, String.Empty)
                        End If
                    Next
                End If
            Next

            limpaCamposDrogas()
            cmbInvolucro.SelectedIndex = -1
            cmbInvolucroAut.SelectedIndex = -1
            txtInvolucroAut.Text = String.Empty
            txtInvolucroIC.Text = String.Empty
            pnlInvolucro.Visible = False
            txtInvolucroAut.Visible = False
            lbAut.Visible = False
            txtInvolucroIC.Visible = False
            lbIc.Visible = False
            gridDrogas.Rows.Clear()
            pnlAutoridade.Visible = False
            fracionar = False
            n = 0
            tevePeso = False
            erroNivel = 0
            mensagem = String.Empty
            nomeDiretorio = Nothing
            cmbInvolucro.Text = String.Empty

        Catch ex As Exception
            generica.gravaErro(ex)
        End Try
    End Sub

    Private Sub rdMeyerPositivo_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

    End Sub

    Private Sub rdMeyerNegativo_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

    End Sub



    Private Sub TextboxNumeric_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)

        Dim nonNumberEntered As Boolean

        nonNumberEntered = True

        If (e.KeyChar >= Convert.ToChar(48) AndAlso e.KeyChar <= Convert.ToChar(57)) OrElse e.KeyChar = Convert.ToChar(8) OrElse e.KeyChar = Convert.ToChar(44) Then

            nonNumberEntered = False

        End If

        If nonNumberEntered = True Then

            ' Stop the character from being entered into the control

            ' since it is non-numerical.

            e.Handled = True

        Else

            e.Handled = False

        End If

    End Sub

    Private Sub txtQtdeUnidades_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtQtdeUnidades.KeyPress
        If Not (Char.IsNumber(e.KeyChar) Or Char.IsControl(e.KeyChar)) Then e.Handled = True
    End Sub

    Private Sub txtQtdeUnidades_MaskInputRejected(sender As Object, e As MaskInputRejectedEventArgs) Handles txtQtdeUnidades.MaskInputRejected

    End Sub

    Private Sub txtQtdeUnidades_TextChanged(sender As Object, e As EventArgs) Handles txtQtdeUnidades.TextChanged
        If txtQtdeUnidades.Text.Equals(String.Empty) Then
            erro.SetError(txtQtdeUnidades, "Informe a quantidade de invólucros")
        Else
            erro.SetError(txtQtdeUnidades, String.Empty)
        End If
    End Sub

    Private Sub txtPesoTotal_KeyPress(sender As Object, e As KeyPressEventArgs)
        If Not (Char.IsNumber(e.KeyChar) Or e.KeyChar.Equals(Sep) Or Char.IsControl(e.KeyChar)) Then e.Handled = True
    End Sub

    Private Sub txtPesoTotal_Leave(sender As Object, e As EventArgs)
        If txtPesoTotal.Text.Length = 0 Then
            erro.SetError(txtPesoTotal, "Preenchimento do campo é obrigatório")
            txtPesoTotal.Focus()
        Else
            erro.SetError(txtPesoTotal, "")
        End If
    End Sub

    Private Sub cmbDescricao_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbDescricao.SelectedIndexChanged
        If IsNothing(cmbDescricao.SelectedItem) Then
            erro.SetError(cmbDescricao, "Preenchimento obrigatório")
        Else
            erro.SetError(cmbDescricao, "")
        End If
    End Sub


    Private Sub cmbCor_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbCor.SelectedIndexChanged
        If IsNothing(cmbCor.SelectedItem) < 0 Then
            erro.SetError(cmbCor, " Preenchimento obrigatório")
        Else
            erro.SetError(cmbCor, "")
        End If
    End Sub

    Private Sub cmbAcondicionamento_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbAcondicionamento.SelectedIndexChanged
        If cmbAcondicionamento.SelectedIndex < 0 Then
            erro.SetError(cmbAcondicionamento, " Preenchimento obrigatório")
        Else
            erro.SetError(cmbAcondicionamento, "")
        End If
    End Sub
    Private Sub cmbAdicionar_Click(sender As Object, e As EventArgs) Handles btnAdicionar.Click

        Dim substancia As New StringBuilder
        Dim exame As New StringBuilder
        Dim acondicionamento As New StringBuilder

        If validaCampos() Then

            '------------------------------------------------------------------------------------
            ' ALTERAÇÕES REALIZADAS DE ACORDO COM MANIFESTO DA SPTC
            '------------------------------------------------------------------------------------
            substancia.Append("MATERIAL ").Append(generica.formataNumeroMaterial(gridDrogas.RowCount + 1)).Append(": ")
            substancia.Append(generica.formataNumeroMaterial(txtQtdeUnidades.Text)).Append(" (").Append(generica.NumeroToExtenso(txtQtdeUnidades.Text)).Append(") ")
            If cmbCor.Text.Equals("incolor") Then
                substancia.Append(cmbAcondicionamento.Text).Append(" contendo ").Append(cmbDescricao.Text).Append(" ").Append(cmbCor.Text)
            Else
                substancia.Append(cmbAcondicionamento.Text).Append(" contendo ").Append(cmbDescricao.Text).Append(" de coloração ").Append(cmbCor.Text)
            End If


            If _ucDrogas.getDrogas.Equals("ECSTASY") Or _ucDrogas.getDrogas.Equals("LOLÓ") _
                Or _ucDrogas.getDrogas.Equals("LANÇAPERFUME") Or _ucDrogas.getDrogas.Equals("LSD") _
                Or _ucDrogas.getDrogas.Equals("SOLVENTES") Then
                tevePeso = False
                substancia.Append(".")
            Else
                'substancia.Append(" pesando, " & Chr(34) & "in totum" & Chr(34) & ", ").Append(txtPesoTotal.Text).Append(" g (").Append(generica.extensoDecimalQuimicaLegal(txtPesoTotal.Text))
                substancia.Append(" pesando, " & Chr(34) & "in totum" & Chr(34) & ", ").Append(generica.extensoDecimalQuimicaLegal(txtPesoTotal.Text)).Append(".")
                tevePeso = True
                'If CInt(txtQtdeUnidades.Text) = 1 Then
                '    substancia.Append(" grama).")
                'Else
                '    substancia.Append(" gramas).")
                'End If
            End If

            '-------------------------------------------------------------
            ' TRATA O RESULTADO SE FOR TCO PARA SUBSTÂNCIAS ESPECÍFICAS
            '-------------------------------------------------------------
            '  If _ehTco Then

            exame.Append("MATERIAL ").Append(generica.formataNumeroMaterial(gridDrogas.RowCount + 1)).Append(": ")
            Select Case _ucDrogas.getDrogas.ToUpper
                Case "SOLVENTES"
                    exame.Append("realizada a análise na substância descrita no ").Append("MATERIAL "). _
                        Append(generica.formataNumeroMaterial(gridDrogas.RowCount + 1)).Append(" foi constatada a presença de uma mistura contendo "). _
                        Append(textoMistura).Append(". ").Append(_ucDrogas.getResultado)
                Case "MISTURA DE ENTORPECENTES"
                    exame.Append("realizada a análise na substância descrita no ").Append("MATERIAL "). _
                        Append(generica.formataNumeroMaterial(gridDrogas.RowCount + 1)).Append(" foi constatada a presença de uma mistura contendo "). _
                        Append(textoMistura).Append(". ").Append(textoMisturaEntorpecentes)
                Case "SUBSTÂNCIA TERAPÊUTICA ANTIDEPRESSIVA"
                    exame.Append("realizada a análise na substância descrita no ").Append("MATERIAL "). _
                       Append(generica.formataNumeroMaterial(gridDrogas.RowCount + 1)).Append(" foi constatada a presença de substância  utilizada terapeuticamente como antidepressivo e encontra-se enquadrada na Portaria nº 344 da Secretaria Nacional de Vigilância Sanitária do Ministério da Saúde de 12/05/98 como "). _
                       Append(textoMisturaEntorpecentes).Append(". ")
                Case Else
                    exame.Append("realizada a análise na substância descrita no ").Append("MATERIAL ").Append(generica.formataNumeroMaterial(gridDrogas.RowCount + 1)).Append(_ucDrogas.getResultado)
            End Select
            ''Else
            ''    exame.Append("Realizada a análise preliminar na substância descrita no ").Append("MATERIAL ").Append(generica.formataNumeroMaterial(gridDrogas.RowCount + 1)).Append(_ucDrogas.getResultado)
            ''End If

            acondicionamento.Append("MATERIAL ").Append(generica.formataNumeroMaterial(gridDrogas.RowCount + 1)).Append(": ")

            If rbSim.Checked Then
                If _ucDrogas.getDrogas.Equals("ECSTASY") Or _ucDrogas.getDrogas.Equals("LSD") Or _ucDrogas.getDrogas.Equals("LOLÓ") Or _ucDrogas.getDrogas.Equals("LANÇAPERFUME") Then
                    acondicionamento.Append("uma alíquota da amostra referente a "). _
                        Append(generica.formataNumeroMaterial(n)).Append(" (").Append(generica.NumeroToExtenso(n)).Append(")"). _
                        Append(" unidades do material acima descrito, após a realização dos procedimentos de homogeneização, em conformidade com a UNODC (United Nations Office on Drugs and Crime, 2009), será enviada ").Append(textoPPI).Append(" para a realização do exame definitivo.")
                Else
                    If _ehTco Then
                        acondicionamento.Append("uma alíquota da amostra referente a ").Append(generica.formataNumeroMaterial(n)).Append(" (").Append(generica.NumeroToExtenso(n)).Append(")").Append(" unidades do material acima descrito, após a realização dos procedimentos de homogeneização, em conformidade com a UNODC (United Nations Office on Drugs and Crime, 2009), foi armazenada em 01 (um) microtubo plástico e identificada com a numeração ").Append(generica.formataNumeroMaterial(gridDrogas.RowCount + 1)).Append(", reservada para fins de contraprova.")
                    Else
                        acondicionamento.Append("uma alíquota da amostra referente a ").Append(generica.formataNumeroMaterial(n)).Append(" (").Append(generica.NumeroToExtenso(n)).Append(")").Append(" unidades do material acima descrito, após a realização dos procedimentos de homogeneização, em conformidade com a UNODC (United Nations Office on Drugs and Crime, 2009), foi armazenada em 01 (um) microtubo plástico e identificada com a numeração ").Append(generica.formataNumeroMaterial(gridDrogas.RowCount + 1)).Append(".")
                    End If

                End If
            Else
                acondicionamento.Append("Todo material referente a este item será enviado ").Append(textoPPI).Append(" ")

                If _ucDrogas.getDrogas.Equals("ECSTASY") Or _ucDrogas.getDrogas.Equals("LSD") Or _ucDrogas.getDrogas.Equals("LOLÓ") Or _ucDrogas.getDrogas.Equals("LANÇAPERFUME") Then
                    acondicionamento.Append("para a realização do exame definitivo de drogas.")
                Else
                    acondicionamento.Append("para a realização do exame definitivo de drogas.")
                End If
            End If

            gridDrogas.Rows.Add(substancia.ToString, exame.ToString, acondicionamento.ToString, _ucDrogas.getDrogas, txtPesoTotal.Text, rbSim.Checked, IIf(rbSim.Checked, "SIM", "NÃO"), generica.formataNumeroMaterial(gridDrogas.RowCount + 1), tevePeso)
            substancia.Clear()
            exame.Clear()
            acondicionamento.Clear()
            limpaCamposDrogas()
            limpaErros()
            pnlResultado.Focus()


        End If
    End Sub

    Private Sub limpaErros()
        erro.SetError(cmbDescricao, String.Empty)
        erro.SetError(cmbAcondicionamento, String.Empty)
        erro.SetError(cmbCor, String.Empty)
        erro.SetError(txtQtdeUnidades, String.Empty)
        erro.SetError(txtPesoTotal, String.Empty)
        erro.SetError(_ucDrogas, String.Empty)
    End Sub

    Private Sub rbNao_CheckedChanged(sender As Object, e As EventArgs) Handles rbNao.CheckedChanged

        If rbNao.Checked Then
            lblMensagem.Visible = False
            lblMensagem.Text = "Não há necessidade de realizar a amostragem do material"
            n = 0
        End If
    End Sub

    Private Sub rbSim_CheckedChanged(sender As Object, e As EventArgs) Handles rbSim.CheckedChanged
        If rbSim.Checked Then
            If CInt(txtQtdeUnidades.Text) = 1 Then
                MsgBox("Quantidade igual a uma unidade. O fracionamento só é possível para quantidades maiores do que 1.")
                rbNao.Checked = True
            Else
                lblMensagem.Visible = True
                If txtQtdeUnidades.Text.Length = 0 Then
                    erro.SetError(txtQtdeUnidades, "Favor informar a quantidade da substância")
                    txtQtdeUnidades.Focus()
                Else
                    n = Sqrt(txtQtdeUnidades.Text)
                    lblMensagem.Text = "Retirar : " & n & " amostras da substância"
                End If
            End If
        End If
    End Sub


    'Private Sub cmbInvolucro_SelectedIndexChanged(sender As Object, e As EventArgs)

    '    If cmbInvolucro.Text.Equals("invólucro de segurança") Then
    '        lbIc.Visible = True
    '        txtInvolucroIC.Visible = True
    '    Else
    '        lbIc.Visible = False
    '        txtInvolucroIC.Visible = False

    '    End If
    'End Sub

    Private Sub txtInvolucroIC_Leave(sender As Object, e As EventArgs)
        If Not txtInvolucroIC.Text.Equals(String.Empty) Then
            erro.SetError(txtInvolucroIC, String.Empty)
        End If
    End Sub

    Private Sub txtInvolucroAut_Leave(sender As Object, e As EventArgs)
        If Not txtInvolucroAut.Text.Equals(String.Empty) Then
            erro.SetError(txtInvolucroAut, String.Empty)
        End If
    End Sub



    Private Sub limpaCamposDrogas()
        cmbDescricao.SelectedIndex = -1
        cmbCor.SelectedIndex = -1
        txtQtdeUnidades.Text = String.Empty
        cmbAcondicionamento.SelectedIndex = -1
        txtPesoTotal.Text = String.Empty
        _ucDrogas.cmbDroga.SelectedIndex = -1
        lblMensagem.Text = String.Empty
        rbNao.Checked = True
        txtInvolucroAut.Text = String.Empty
        txtInvolucroIC.Text = String.Empty
        cmbInvolucro.SelectedIndex = -1


    End Sub
    Private Sub cmbInvolucroAut_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbInvolucroAut.SelectedIndexChanged
        If cmbInvolucroAut.Text.Equals("invólucro de segurança") Then
            txtInvolucroAut.Visible = True
            lbAut.Visible = True
        Else
            txtInvolucroAut.Visible = False
            lbAut.Visible = False
        End If
    End Sub

    Private Sub cmbInvolucro_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbInvolucro.SelectedIndexChanged
        If cmbInvolucro.Text.Equals("invólucro de segurança") Then

            txtInvolucroIC.Visible = True
            lbIc.Visible = True
            pnlAutoridade.Visible = False

            If fracionar Then
                pnlAutoridade.Visible = True
            Else
                pnlAutoridade.Visible = False
            End If

        Else

            txtInvolucroIC.Visible = False
            lbIc.Visible = False
        End If
    End Sub
    Private Sub habilitaPainelInferior(ByVal habilita As Boolean)

        pnlItens.Enabled = habilita
        pnlInvolucro.Visible = Not habilita


    End Sub


    Private Sub cmdOk_Click(sender As Object, e As EventArgs) Handles cmdOk.Click
        pnlInvolucro.Visible = False
        If validaInvolucro() Then
            If (generica.validaCampos(ucPreambulo)) Then
                If gridDrogas.Rows.Count = 0 Then
                    MsgBox("Adicione pelo menos uma substância na lista")

                Else
                    pb.Visible = True
                    generica.salvaPreambulo(ucPreambulo)
                    geraLaudo()
                    If erroNivel > 0 Then
                        If generica.rollBack(registroGlobal.registroPincipal, nomeDiretorio, erroNivel, ucPreambulo.ehNovo, ucPreambulo) Then
                            MsgBox("O sistema recuperou de um erro grave e nenhuma informação foi gravada. Para registrar um novo laudo, clique em novo laudo")
                            erroNivel = 0
                            ucPreambulo.btnLimpaCampos.PerformClick()
                        End If
                    Else
                        ' ucPreambulo.txtDataEntrada.Enabled = False
                        habilita(False, , True, False, False, True, False)
                    End If

                End If
            End If

        Else
            pnlInvolucro.Visible = True
        End If
    End Sub

    Private Sub Button1_Click_2(sender As Object, e As EventArgs) Handles Button1.Click
        pnlInvolucro.Visible = False
        habilitaPainelInferior(True)
    End Sub

    Private Sub txtPesoTotal_KeyPress1(sender As Object, e As KeyPressEventArgs) Handles txtPesoTotal.KeyPress
        If Not (Char.IsNumber(e.KeyChar) Or e.KeyChar.Equals(Sep) Or Char.IsControl(e.KeyChar)) Then e.Handled = True
    End Sub

 
    Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click

        Dim textoDrogas As New StringBuilder
        Dim textoResultado As New StringBuilder
        Dim indice As Integer = 0

        For Each controle As Control In grpAntiDepressivo.Controls
            If TypeOf (controle) Is RadioButton Then
                If DirectCast(controle, RadioButton).Checked Then
                    textoResultado.Append(DirectCast(controle, RadioButton).Tag).Append(Environment.NewLine)
                End If
            End If
        Next
        textoMisturaEntorpecentes = textoResultado.ToString
        limpaCheck()
        textoDrogas = Nothing
        textoResultado = Nothing
        grpAntiDepressivo.Visible = False
        cmbDescricao.Focus()
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim texto As New StringBuilder
        textoMistura = String.Empty
        Dim indice As Integer = 0
        Dim passou As Boolean = False

        For Each controle As Control In grpMistura.Controls
            If TypeOf (controle) Is CheckBox Then
                If DirectCast(controle, CheckBox).Checked Then
                    If DirectCast(controle, CheckBox).Text.ToLower.Equals("outros") Then
                        texto.Append(txtOutro.Text).Append(", ")
                    Else
                        texto.Append(DirectCast(controle, CheckBox).Text).Append(", ")
                    End If
                End If
            End If
        Next

        If passou Then

            textoMistura = (generica.retiraVirgulas(texto.ToString))
            limpaCheck()
            grpMisturaEntorpecente.Visible = False
            cmbDescricao.Focus()
        Else
            MsgBox("Selecione pelo menos uma opção ou saia da tela clicando no 'X'")
        End If

        'indice = texto.ToString.Substring(0, texto.ToString.Length - 1).ToLower.LastIndexOf(",")
        'textoMistura = texto.ToString.Substring(0, texto.ToString.Length - 1).ToLower
        'textoMistura = textoMistura.Substring(0, indice) & " e " & textoMistura.Substring(indice + 1)
        'limpaCheck()

        texto = Nothing
        grpMistura.Visible = False
        cmbDescricao.Focus()
    End Sub

    Private Sub limpaCheck()
        For Each controle As Control In grpMistura.Controls
            If TypeOf (controle) Is CheckBox Then
                DirectCast(controle, CheckBox).Checked = False
            End If
        Next
        For Each controle As Control In grpMisturaEntorpecente.Controls
            If TypeOf (controle) Is CheckBox Then
                DirectCast(controle, CheckBox).Checked = False
            End If
        Next
        rbA1.Checked = True

    End Sub

    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click

        Dim textoDrogas As New StringBuilder
        Dim textoResultado As New StringBuilder
        Dim indice As Integer = 0
        Dim passou As Boolean = False

        For Each controle As Control In grpMisturaEntorpecente.Controls
            If TypeOf (controle) Is CheckBox Then
                If DirectCast(controle, CheckBox).Checked Then
                    If DirectCast(controle, CheckBox).Text.ToLower.Equals("outros") Then
                        textoDrogas.Append(txtMisturaDrogas.Text).Append(", ")
                    Else
                        textoDrogas.Append(DirectCast(controle, CheckBox).Text.ToUpper).Append(", ")
                        textoResultado.Append(DirectCast(controle, CheckBox).Tag).Append(Environment.NewLine)
                    End If
                    passou = True
                End If
            End If
        Next

        If passou Then
            'indice = textoDrogas.ToString.Substring(0, textoDrogas.ToString.Length - 1).ToLower.LastIndexOf(",")
            'textoMistura = textoDrogas.ToString.Substring(0, textoDrogas.ToString.Length - 1).ToLower
            'textoMistura = textoMistura.Substring(0, indice) & " e " & textoMistura.Substring(indice + 1)
            'textoMisturaEntorpecentes = textoResultado.ToString

            textoMistura = (generica.retiraVirgulas(textoDrogas.ToString))
            textoMisturaEntorpecentes = textoResultado.ToString

            limpaCheck()
            textoDrogas = Nothing
            textoResultado = Nothing
            grpMisturaEntorpecente.Visible = False
            cmbDescricao.Focus()
        Else
            MsgBox("Selecione pelo menos uma opção ou saia da tela clicando no 'X'")
        End If
        
    End Sub

    Private Sub chkOutrosMistura_CheckedChanged(sender As Object, e As EventArgs) Handles chkOutrosMistura.CheckedChanged
        If chkOutrosMistura.Checked Then
            txtMisturaDrogas.Visible = True
        Else
            txtMisturaDrogas.Visible = False
        End If
    End Sub

    Private Sub chkOutros_CheckedChanged(sender As Object, e As EventArgs) Handles chkOutros.CheckedChanged
        If chkOutros.Checked Then
            txtOutro.Visible = True
        Else
            txtOutro.Visible = False
        End If
    End Sub

    Private Sub btnSairMistura_Click(sender As Object, e As EventArgs) Handles btnSairMistura.Click
        grpMistura.Visible = False
        grpMistura.Enabled = False
        limpaCheck()
    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        grpMisturaEntorpecente.Visible = False
        grpMisturaEntorpecente.Enabled = False
        limpaCheck()
    End Sub

    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        grpAntiDepressivo.Visible = False
        grpAntiDepressivo.Enabled = False
        limpaCheck()
    End Sub

    Private Sub btnMistura_Click(sender As Object, e As EventArgs) Handles btnMistura.Click


        Dim texto As New StringBuilder
        textoMistura = String.Empty
        Dim indice As Integer = 0
        Dim passou As Boolean = False

        For Each controle As Control In grpMistura.Controls
            If TypeOf (controle) Is CheckBox Then
                If DirectCast(controle, CheckBox).Checked Then
                    If DirectCast(controle, CheckBox).Text.ToLower.Equals("outros") Then
                        texto.Append(txtOutro.Text).Append(", ")
                    Else
                        texto.Append(DirectCast(controle, CheckBox).Text).Append(", ")
                    End If
                    passou = True
                End If
            End If
        Next


        If passou Then
            'indice = texto.ToString.Substring(0, texto.ToString.Length - 1).ToLower.LastIndexOf(",")
            'textoMistura = texto.ToString.Substring(0, texto.ToString.Length - 1).ToLower
            'textoMistura = textoMistura.Substring(0, indice) & " e " & textoMistura.Substring(indice + 1)
            textoMistura = (generica.retiraVirgulas(texto.ToString))
            limpaCheck()
            texto = Nothing
            grpMistura.Visible = False
            cmbDescricao.Focus()
        Else
            MsgBox("Selecione pelo menos uma opção ou saia da tela clicando no 'X'")
        End If

    End Sub

    Private Sub txtInvolucroIC_KeyUp(sender As Object, e As KeyEventArgs) Handles txtInvolucroIC.KeyUp

        If txtInvolucroIC.Text.Length > 4 Then
            erro.SetError(txtInvolucroIC, String.Empty)
        Else
            erro.SetError(txtInvolucroIC, "Campo obrigatório")
        End If
    End Sub

    Private Sub txtInvolucroAut_KeyUp(sender As Object, e As KeyEventArgs) Handles txtInvolucroAut.KeyUp
        If txtInvolucroAut.Text.Length > 4 Then
            erro.SetError(txtInvolucroAut, String.Empty)
        Else
            erro.SetError(txtInvolucroAut, "Campo obrigatório")
        End If
    End Sub
End Class